#ifndef __MMU_H__
#define __MMU_H__

#define INICIO_PAGINAS_KERNEL 	0x00100000
#define INICIO_PAGINAS_USUARIO	0x00180000
#define TAMANO_PAGINA 			0x00001000
#define TAMANO_PAGINA_4MB		0x00400000
#define DIR_4MB				0x00400000
#define MAX_MEM					0x04000000

#define CANTIDAD_PAGINAS_KERNEL		(INICIO_PAGINAS_USUARIO-INICIO_PAGINAS_KERNEL)/TAMANO_PAGINA
#define	CANTIDAD_PAGINAS_USUARIO	(MAX_MEM-INICIO_PAGINAS_USUARIO)/TAMANO_PAGINA
///Para probar que pasa si no hay paginas suficientes.
///#define	CANTIDAD_PAGINAS_USUARIO	0x100

#define PRESENTE					0X1
#define NO_PRESENTE					0X0

#define LECTURA_ESCRITURA			0X2
#define LECTURA						0X0

#define USUARIO						0X4
#define SUPERVISOR					0X0
#define SIZE_PAGE_4MB					0x80


unsigned int *pagina_libre_usuario();
unsigned int *pagina_libre_kernel();
void mapear_pagina(unsigned int virtual, unsigned int cr3, unsigned int fisica, unsigned int atributos);
unsigned int* inicializar_dir_usuario();
unsigned int obtener_virtual_libre(unsigned int *cr3);

#endif
